/**********************************************************************************************************************
 * @file    pair.h
 * @author  Queclink Jason.Huang
 * @date    2022-04-26
 * @brief
 *
 * Copyright (C) 2022 Queclink Wireless Solutions (ShenZhen) Co., Ltd. All Rights Reserved.
 *
 * @attention
 *
 * @usage
 *
 *********************************************************************************************************************/
#ifndef __PAIR_H
#define __PAIR_H
/* includes ---------------------------------------------------------------------------------------------------------*/
#include <qlcommon.h>


#ifdef __cplusplus
extern "C" {
#endif

#define PAIR_HEAD_STR  "$PAIR"

typedef enum {
    PAIR_MSG_ACK            = 1,      /* $PAIR001,<Command_ID>,<Result>*<Checksum><CR><LF> */
    PAIR_SUBSYS_ON          = 2,
    PAIR_SUBSYS_OFF         = 3,      /* 关闭后无法定位 */
    PAIR_SUBSYS_HOT         = 4,      /* 成功复位后响应ACK */
    PAIR_SUBSYS_WARM        = 5,
    PAIR_SUBSYS_COLD        = 6,
    PAIR_SUBSYS_FULLCOLD    = 7,
    PAIR_REQUEST_AIDING     = 10,      /* 模块启动时输出提示辅助数据过期 */
    PAIR_GET_VERSION        = 20,
    PAIR_SYSTEM_REBOOT      = 23,
    PAIR_SET_FIX_RATE       = 50,      /* 设置位置定位间隔 100~1000ms */
    PAIR_GET_FIX_RATE       = 51,
    PAIR_SET_MIN_SNR        = 58,      /* 设置信噪比阈值,过低则不用于定位 */
    PAIR_GET_MIN_SNR        = 59,
    PAIR_SET_NMEA_RATE      = 62,      /* nmea语句输出频率0~20position/once */
    PAIR_GET_NMEA_RATE      = 63,
    PAIR_SET_GNSS_SEARCH    = 66,      /* 导航系统 */
    PAIR_GET_GNSS_SEARCH    = 67,
    PAIR_SET_STATIC_THOLD   = 70,      /* 静态速度阈值 */
    PAIR_GET_STATIC_THOLD   = 71,
    PAIR_SET_ELEV_MASK      = 72,      /* 设置卫星高度角阈值 */
    PAIR_GET_ELEV_MASK      = 73,
    PAIR_SET_NAV_MODE       = 80,      /* 导航平台模型 */
    PAIR_GET_NAV_MODE       = 81,
    PAIR_SET_NMEA_MODE      = 100,      /* nmea 版本及输出设置 */
    PAIR_GET_NMEA_MODE      = 101,      /* nmea 版本及输出设置 */
    PAIR_LOCK_SYS_SLEEP     = 382,
    PAIR_JAMMINH_DETECT     = 391,      /* 干扰检测 */
    PAIR_SBAS_ENABLE        = 410,      /* SBAS 使能 */
    PAIR_GET_SBAS_STATUS    = 411,      /* 获取 SBAS 使能状态 */
    PAIR_GET_EPO_STATUS     = 470,      /* 获取EPO状态 */
    PAIR_NVRAM_AUTO_SAVING_ENABLE =  510,
    PAIR_CMD_SAVE_SETTING   = 513,      /* 保存参数到文件系统 */
    PAIR_REF_UTC            = 590,      /* UTC 参考时间 */
    PAIR_REF_LOC            = 600,      /* 参考位置 */
    PAIR_ENTER_RTC_MODE     = 650,
    PAIR_IO_SET_BAUDRATE    = 864,      /* 设置波特率 */
    PAIR_IO_GET_BAUDRATE    = 865,
    PAIR_IO_SET_FLOW_CONTROL= 866,
    PAIR_CMD_ACTIVATE       = 6006,     /* 激活设备 */
    PAIR_GET_UUID           = 6007,     /* 查询UUID(32字节), 用于激活设备 */
    PAIR_GET_ACT_STATE      = 6008,     /* 查询激活状态 */
} pairCmd_t;

typedef enum{
      PAIR_CMD_SUCCESS      = 0,                /*命令发送成功*/
      PAIR_ACK_PROCCESSING  = 1,                /*命令处理中*/
      PAIR_ACK_FAIL         = 2,                /*命令发送失败*/
      PAIR_ACK_NOT_SUPPORT  = 3,                /*命令不支持*/
      PAIR_ACK_PARAM_ERROR  = 4,                /*命令有误，超出范围/参数丢失/校验码有误*/
      PAIR_ACK_SERVICE_BUSY = 5,                /*MNL服务繁忙，可稍后重试*/
      PAIR_ACK_MAX          = 0xFF
}pair_ack_t;

/* PAIR_REF_UTC */
struct pairRefUtc {
    uint16_t        year;
    uint8_t         month;
    uint8_t         day;
    uint8_t         hour;
    uint8_t         minute;
    uint8_t         second;
};

/* PAIR_REF_LOC */
struct pairRefLoc {
    float           lat;                /* 保留小数点后六位 */
    float           lon;
    float           height;             /* 海拔 */
};

int pairCommandSend(pairCmd_t cmd, void *param);

void pair_parse(int argc, char *argv[]);


#ifdef __cplusplus
}
#endif

#endif /* __PAIR_H */
